home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
X11
/
seyon
/
SeTrans.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-05-03
|
5KB
|
223 lines
/*
* This file is part of the Seyon, Copyright (c) 1992-1993 by Muhammad M.
* Saggaf. All rights reserved.
*
* See the file COPYING (1-COPYING) or the manual page seyon(1) for a full
* statement of rights and permissions for this program.
*/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Dialog.h>
#include <X11/Xaw/Viewport.h>
#include "MultiList.h"
#include <math.h>
#include "seyon.h"
#include "SeDecl.h"
int ReadParseProtFile();
void DoTransfer(),
DoUpload(),
exec_upload(),
ReReadProtFile(),
SeTransfer();
struct _protItem {
char name[LIT_BUF];
char command[REG_BUF];
Boolean reqName;
};
struct _protItem *protItems[MAX_ENT];
XfwfMultiListWidget mlw;
int transCurItemIndex;
void
TopTransfer(widget, clientData)
Widget widget;
XtPointer clientData;
{
void EditFile();
Widget popup, mBox, uBox, lBox,
view,
list;
static char protocolsFile[REG_BUF];
static String disItems[MAX_ENT + 1] = {NULL};
ErrorIfBusy();
if (disItems[0] == NULL) {
strcpy(protocolsFile, qres.protocolsFile);
if (ReadParseProtFile(protocolsFile, disItems) < 0)
return;
}
popup = AddSimplePopup("transfer", widget);
mBox = SeAddPaned("mBox", popup);
uBox = AddBox("uBox", mBox);
lBox = AddBox("lBox", mBox);
view = XtCreateManagedWidget("view", viewportWidgetClass, uBox, NULL, 0);
list = XtVaCreateManagedWidget("list", xfwfMultiListWidgetClass, view,
XtNlist, disItems, XtNmaxSelectable, 1, NULL);
mlw = (XfwfMultiListWidget) list;
SeSetViewportDimFromList(view, list, 10);
XtAddCallback(list, XtNcallback, DoTransfer, clientData);
AddButton("dismiss", lBox, DestroyShell, NULL);
AddButton("ok", lBox, DoTransfer, clientData);
AddButton("edit", lBox, EditFile, (XtPointer)protocolsFile);
AddButton("reread", lBox, ReReadProtFile, (XtPointer)disItems);
if (clientData) DoTransfer(list, clientData, NULL);
else PopupCentered(popup, widget);
}
char lastUploadFile[REG_BUF];
void
DoTransfer(widget, clientData, callData)
Widget widget;
XtPointer clientData,
callData;
{
XfwfMultiListReturnStruct *item;
Widget popup;
String* actionData = (String*)clientData;
char fullCommand[LRG_BUF];
if (clientData)
{if ((transCurItemIndex = atoi(actionData[0]) - 1) < 0 ||
transCurItemIndex > MAX_ENT - 1)
SimpleError("Invalid Entry Number");}
else {
if ((item = XfwfMultiListGetHighlighted(mlw))->num_selected == 0)
SimpleError("No Item Selected");
transCurItemIndex = item->selected_items[0];
}
strcpy(fullCommand, protItems[transCurItemIndex]->command);
if (protItems[transCurItemIndex]->reqName)
if (actionData == NULL || actionData[1] == NULL) {
popup = GetShell(PopupDialogGetValue("upload", widget, exec_upload,
NULL, lastUploadFile));
PopupCentered(popup, (clientData) ? XtParent(GetShell(widget)) : widget);
return;
}
else
strcat(strcat(fullCommand, " "), actionData[1]);
DestroyShell(widget);
ShellCommand(fullCommand);
}
void
ReReadProtFile(widget, disItems)
Widget widget;
XtPointer disItems[];
{
Widget protWidget = XtParent(GetShell(widget));
FreeList(disItems);
DestroyShell(widget);
TopTransfer(protWidget, NULL);
}
void
exec_upload(widget)
Widget widget;
{
Widget dialog = XtParent(widget);
static char cmd[REG_BUF];
strcpy(lastUploadFile, XawDialogGetValueString(dialog));
sprintf(cmd, "%s %s", protItems[transCurItemIndex]->command,
lastUploadFile);
DestroyShell(XtParent(GetShell(widget)));
ShellCommand(cmd);
}
void
upload_acc_ok(widget)
Widget widget;
{
exec_upload(widget);
}
void
DoShellCommand(widget, command)
Widget widget;
XtPointer command;
{
ShellCommand((String)command);
}
void
TopShell(widget)
Widget widget;
{
void GetValueByPopup();
ErrorIfBusy();
GetValueByPopup(widget, "shellCommand", DoShellCommand);
}
int
ReadParseProtFile(fname, disItems)
String fname;
String disItems[];
{
FILE *fp;
String rawItems[MAX_ENT + 1];
char *buf,
reqName[10];
int i,
n;
if ((fp = open_file(fname, qres.defaultDirectory)) == NULL)
return -1;
ReadCommentedFile(fp, rawItems);
fclose(fp);
FreeList(protItems);
for (i = 0; (buf = rawItems[i]); i++) {
/*
* allocate the record
*/
protItems[i] = XtNew(struct _protItem);
/*
* find the name
*/
GetWord(buf, protItems[i]->name);
/*
* find the command
*/
GetWord(lptr, protItems[i]->command);
/*
* find other stuff
*/
GetWord(lptr, reqName);
if (reqName[0] == 'y' || reqName[0] == 'Y')
protItems[i]->reqName = True;
else
protItems[i]->reqName = False;
}
protItems[i] = (struct _protItem *)NULL;
FreeList(rawItems);
FreeList(disItems);
for (n = 0; n < i; n++)
disItems[n] = XtNewString(protItems[n]->name);
disItems[n] = NULL;
return 0;
}